﻿using System;
using System.Data;
using System.Web.Security;
using SharedLibraries.Constants;
using ThangNM_LIB.DB;
using ThangNM_LIB.EO;
using ThangNM_LIB.FUNC;

namespace ThangNM.Account
{
    public partial class Login : System.Web.UI.Page
    {
        public Int16 iFail
        {
            get { return (Int16)ViewState["iFail"]; }
            set { ViewState["iFail"] = value; }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                MsgUC1.setClearMsg();
                if (!IsPostBack)
                {
                    Response.Cookies["isTest"].Expires = DateTime.Now.AddDays(-1);
                    txtsUsername.Focus();
                    Session["secret"] = null;
                    CaptchaUC1.Visible = false;
                    iFail = 0;
                }
            }
            catch (Exception ex)
            {
                (new Logs()).WriteLog_To_DB(new LogEO(ex.ToString(), ConstEx.Log_iType.EXCEPTION), false);
            }
        }

        public DataSet Check(Int16 iType)
        {
            DataSet dsOutput = null;
            try
            {
                AccountEO _AccountEO = new AccountEO();
                _AccountEO.sUsername = StringEx.Trim(txtsUsername.Text).ToLower();
                _AccountEO.sPassword = Security.EnCrypt(StringEx.Trim(txtsPassword.Text), Security.MD5_Encrypt(_AccountEO.sUsername));
                _AccountEO.iPermission = iType;
                _AccountEO.bState = true;
                dsOutput = (new ShareDAO.UserDAO()).Login(_AccountEO);
            }
            catch (Exception ex)
            {
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.ERROR, ex.Message, ex.ToString());
            }
            return dsOutput;
        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {


            String Return_Url = "~/admin/default.aspx";
            try
            {
                if (CaptchaUC1.CheckValidCaptcha() || iFail < 4)
                {
                    DataSet dsInput = null;
                    dsInput = Check(Account_iPermission_C.Administrator);
                    if (DataTableEx.DataTable_OK(null, dsInput, 0))   // 0. Đăng nhập thành công
                    {
                        AccountEO _AccountEO = new AccountEO();
                        _AccountEO = (new ShareDAO.UserDAO()).AccountDO(dsInput.Tables[0]);
                        if (!String.IsNullOrEmpty(_AccountEO.sPermission))
                            _AccountEO.sPermission = Security.Login.Decrypt(_AccountEO.sPermission, Security.Insert_Salt(_AccountEO.tDateOfReg.ToString(FormatEx.Date_Time.Format_DateTime_Ex), _AccountEO.PK_iAccountID.ToString()));
                        else
                            _AccountEO.sPermission = ",";
                        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket
                        (
                            _AccountEO.PK_iAccountID,
                            _AccountEO.sUsername,
                            DateTime.Now,
                            DateTime.Now.AddMinutes(30),
                            false,
                            _AccountEO.sPermission,
                            FormsAuthentication.FormsCookiePath
                        );
                        Session["secret"] = Security.Login.Encrypt(FormsAuthentication.Encrypt(ticket), Security.Base64Encode(Request.ServerVariables["remote_addr"]));

                        //Response.Redirect(FormsAuthentication.GetRedirectUrl(_AccountEO.sUsername, false));

                        //LoginEO _LoginEO = new LoginEO();
                        //if (chkRememberMe.Checked == true)
                        //{
                        //    //Response.Cookies["secret"].Expires = DateTime.Now.AddDays(10);
                        //    _LoginEO.tCookiesExpires = DateTime.Now.AddDays(10);
                        //}
                        //else
                        //{
                        //    //Response.Cookies["secret"].Expires = DateTime.Now.AddDays(1);
                        //    _LoginEO.tCookiesExpires = DateTime.Now.AddDays(1);
                        //}
                        //_LoginEO.PK_iAccountID = _AccountEO.PK_iAccountID;
                        //_LoginEO.sUsername = StringEx.Trim(txtsUsername.Text).ToLower();
                        //_LoginEO.sIP = Request.ServerVariables["remote_addr"].ToString();
                        //string CookiesValue = Commons.Object2Json(_LoginEO);
                        //Session["secret"] = Security.Login.Encrypt(CookiesValue, Security.Base64Encode(Request.ServerVariables["remote_addr"]));
                        //if (StringEx.Equals(_LoginEO.sUsername, StringEx.Trim(System.Configuration.ConfigurationManager.AppSettings["UserTest"])))
                        //{
                        //    HttpCookie cookie = new HttpCookie("isTest");
                        //    cookie.Value = Security.Token.getToken(new TokenEO(Token_iType_C.Test, DateTime.Now.AddDays(1), _LoginEO.sUsername));
                        //    cookie.Expires = DateTime.Now.AddDays(1);
                        //    Response.Cookies.Add(cookie);
                        //}
                        //String sNoiDung = "Chào " + _AccountEO.sFullName + ",<BR/>" +
                        //    "<a href=\"http://nguyenmanhthang.net/\">NguyenManhThang.Net</a> xin thông báo: <H3><B>\"Quý khách vừa đăng nhập vào trang quản trị " +
                        //    "<a href=\"http://nguyenmanhthang.net/admin\">NguyenManhThang.Net/Admin</a>\"</B></H3><BR/><BR/>" +
                        //    "Tên đăng nhập: " + _AccountEO.sUsername + "<BR/>" +
                        //    "Địa chỉ IP: " + Request.ServerVariables["remote_addr"] + "<BR/>" +
                        //    "Ngày giờ: " + DateTime.Now.ToString("dd/MM/yyyy HH:ss") + "<BR/><BR/>" +
                        //    "Nếu đó là bạn, bạn có thể yên tâm bỏ qua email này.<BR/><BR/>" +
                        //    "Nếu bạn không chắc đó là bạn thì một người sử dụng trái phép có thể đã có mật khẩu của bạn.<BR/>" +
                        //    "Vui lòng <a href=\"http://nguyenmanhthang.net/Admin/ProfileUI.aspx?iType=View\">hãy bấm vào đây</a> để cập nhật mật khẩu ngay.<BR/><BR/>" +
                        //    "Trân trọng cảm ơn.";
                        //    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.SUCCESS, "Đăng nhập thành công sẽ chuyển hướng sau 5s nữa.");
                        if (!String.IsNullOrEmpty(Request.QueryString[QueryString.return_url]))
                        {
                            Return_Url = Request.QueryString[QueryString.return_url];
                        }
                        goto Login_Success;
                    }
                    else // 1. Đăng nhập thất bại
                    {
                        if (DataTableEx.DataTable_OK(null, dsInput, 2) == false)  // 3. Không có quyền vào
                        {
                            MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, String.Format(MessagesEx.Khong_Co_Quyen_Truy_Cap, txtsUsername.Text));
                            txtsUsername.Text = "";
                            txtsUsername.Focus();
                        }
                        else
                        {
                            if (DataTableEx.DataTable_OK(null, dsInput, 3) == false)  // 4. Bị khóa tài khoản
                            {
                                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, MessagesEx.Tai_Khoan_Da_Bi_Khoa);
                                txtsUsername.Focus();
                            }
                            else
                            {
                                if (DataTableEx.DataTable_OK(null, dsInput, 1))   // 2. Sai mật khẩu
                                {
                                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, MessagesEx.Sai_Mat_Khau);
                                    txtsPassword.Focus();
                                }
                                else
                                {  // 5.Lỗi khác!
                                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, MessagesEx.Dang_Nhap_That_Bai);
                                    txtsUsername.Focus();
                                }
                            }
                        }
                    }
                }
                else
                {
                    CaptchaUC1.ReCaptcha();
                    MsgUC1.setNotifications(ConstEx.FunctionSetMsg.WARNING, MessagesEx.Captcha_Khong_Chinh_Xac);
                }
            }
            catch (Exception ex)
            {
                MsgUC1.setNotifications(ConstEx.FunctionSetMsg.ERROR, ex.Message, ex.ToString());
            }
            iFail += 1;
            if (iFail >= 4)
            {
                CaptchaUC1.Visible = true;
            }
            return;

        Login_Success:
            Response.Redirect(Return_Url);
        }
    }
}